      module mo_lu_solve
      private
      public :: lu_slv
      contains
      subroutine lu_slv01( lu, b )
      use shr_kind_mod, only : r8 => shr_kind_r8
      implicit none
!-----------------------------------------------------------------------
! ... Dummy args
!-----------------------------------------------------------------------
      real(r8), intent(in) :: lu(:)
      real(r8), intent(inout) :: b(:)
!-----------------------------------------------------------------------
! ... Local variables
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
! ... solve L * y = b
!-----------------------------------------------------------------------
         b(5) = b(5) - lu(4) * b(3)
         b(13) = b(13) - lu(5) * b(3)
         b(5) = b(5) - lu(8) * b(4)
         b(11) = b(11) - lu(9) * b(4)
         b(13) = b(13) - lu(10) * b(4)
         b(10) = b(10) - lu(14) * b(5)
         b(11) = b(11) - lu(15) * b(5)
         b(13) = b(13) - lu(16) * b(5)
         b(7) = b(7) - lu(18) * b(6)
         b(10) = b(10) - lu(19) * b(6)
         b(11) = b(11) - lu(20) * b(6)
         b(13) = b(13) - lu(21) * b(6)
         b(14) = b(14) - lu(22) * b(6)
         b(11) = b(11) - lu(24) * b(7)
         b(13) = b(13) - lu(25) * b(7)
         b(11) = b(11) - lu(28) * b(8)
         b(13) = b(13) - lu(29) * b(8)
         b(14) = b(14) - lu(30) * b(8)
         b(10) = b(10) - lu(33) * b(9)
         b(12) = b(12) - lu(34) * b(9)
         b(13) = b(13) - lu(35) * b(9)
         b(11) = b(11) - lu(42) * b(10)
         b(12) = b(12) - lu(43) * b(10)
         b(13) = b(13) - lu(44) * b(10)
         b(14) = b(14) - lu(45) * b(10)
         b(12) = b(12) - lu(52) * b(11)
         b(13) = b(13) - lu(53) * b(11)
         b(14) = b(14) - lu(54) * b(11)
         b(13) = b(13) - lu(60) * b(12)
         b(14) = b(14) - lu(61) * b(12)
         b(14) = b(14) - lu(75) * b(13)
      end subroutine lu_slv01
      subroutine lu_slv02( lu, b )
      use shr_kind_mod, only : r8 => shr_kind_r8
      implicit none
!-----------------------------------------------------------------------
! ... Dummy args
!-----------------------------------------------------------------------
      real(r8), intent(in) :: lu(:)
      real(r8), intent(inout) :: b(:)
!-----------------------------------------------------------------------
! ... Local variables
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
! ... solve L * y = b
!-----------------------------------------------------------------------
!-----------------------------------------------------------------------
! ... Solve U * x = y
!-----------------------------------------------------------------------
         b(14) = b(14) * lu(83)
         b(13) = b(13) - lu(82) * b(14)
         b(12) = b(12) - lu(81) * b(14)
         b(11) = b(11) - lu(80) * b(14)
         b(10) = b(10) - lu(79) * b(14)
         b(9) = b(9) - lu(78) * b(14)
         b(8) = b(8) - lu(77) * b(14)
         b(7) = b(7) - lu(76) * b(14)
         b(13) = b(13) * lu(74)
         b(12) = b(12) - lu(73) * b(13)
         b(11) = b(11) - lu(72) * b(13)
         b(10) = b(10) - lu(71) * b(13)
         b(9) = b(9) - lu(70) * b(13)
         b(8) = b(8) - lu(69) * b(13)
         b(7) = b(7) - lu(68) * b(13)
         b(6) = b(6) - lu(67) * b(13)
         b(5) = b(5) - lu(66) * b(13)
         b(4) = b(4) - lu(65) * b(13)
         b(3) = b(3) - lu(64) * b(13)
         b(2) = b(2) - lu(63) * b(13)
         b(1) = b(1) - lu(62) * b(13)
         b(12) = b(12) * lu(59)
         b(11) = b(11) - lu(58) * b(12)
         b(10) = b(10) - lu(57) * b(12)
         b(9) = b(9) - lu(56) * b(12)
         b(7) = b(7) - lu(55) * b(12)
         b(11) = b(11) * lu(51)
         b(10) = b(10) - lu(50) * b(11)
         b(9) = b(9) - lu(49) * b(11)
         b(8) = b(8) - lu(48) * b(11)
         b(5) = b(5) - lu(47) * b(11)
         b(4) = b(4) - lu(46) * b(11)
         b(10) = b(10) * lu(41)
         b(9) = b(9) - lu(40) * b(10)
         b(7) = b(7) - lu(39) * b(10)
         b(6) = b(6) - lu(38) * b(10)
         b(5) = b(5) - lu(37) * b(10)
         b(2) = b(2) - lu(36) * b(10)
         b(9) = b(9) * lu(32)
         b(1) = b(1) - lu(31) * b(9)
         b(8) = b(8) * lu(27)
         b(7) = b(7) - lu(26) * b(8)
         b(7) = b(7) * lu(23)
         b(6) = b(6) * lu(17)
         b(5) = b(5) * lu(13)
         b(4) = b(4) - lu(12) * b(5)
         b(2) = b(2) - lu(11) * b(5)
         b(4) = b(4) * lu(7)
         b(2) = b(2) - lu(6) * b(4)
         b(3) = b(3) * lu(3)
         b(2) = b(2) * lu(2)
         b(1) = b(1) * lu(1)
      end subroutine lu_slv02
      subroutine lu_slv( lu, b )
      use shr_kind_mod, only : r8 => shr_kind_r8
      implicit none
!-----------------------------------------------------------------------
! ... Dummy args
!-----------------------------------------------------------------------
      real(r8), intent(in) :: lu(:)
      real(r8), intent(inout) :: b(:)
      call lu_slv01( lu, b )
      call lu_slv02( lu, b )
      end subroutine lu_slv
      end module mo_lu_solve
